Mise à jour le 02/01/2022
La commande ssh de A à X

La commande ssh de A à X


📖️️Tout ce qui suit est une copie partielle (et parfois corrigée) de la page suivante : https://wiki.debian.org/fr/SSH


1. Introduction

SSH1 (« Secure SHell ») est un protocole de communication sécurisé. Il permet, entre autres, de se connecter à un hôte à distance de façon sécurisée sur un réseau qui ne l'est pas forcément. Rendez-vous sur Wikipedia - Secure Shell pour plus d'informations, ainsi que ssh, lsh-client ou dropbear pour découvrir quelques implémentations du protocole SSH présentes dans Debian, avec bien sûr OpenSSH qui est probablement la plus populaire2. SSH remplace et améliore telnet,rlogin et rsh, qui sont tous des protocoles de communication à distance mais n'incluant aucune couche de sécurité.

Dans ce document nous allons utiliser la suite OpenSSH, et il sera également supposé que les deux variables suivantes seront définies :

hôte_distant=<l'ordinateur à distance>
utilisateur_distant=<nom d'utilisateur sur $hôte_distant>

Par conséquent, pour reproduire les commandes ci-dessous, veillez à bien remplacer ces valeurs par celles qui vous intéressent. Notez aussi que « hôte_distant » peut être une adresse IP.

2. Installation

2.1 Installation du client

Normalement, le client est installé par défaut, sinon il suffit de saisir en tant que superutilisateur :

apt install openssh-client

2.2 Installation du serveur

La partie serveur permet à des hôtes distants de se connecter à votre système et sera installée comme suit en tant que superutilisateur :

apt install openssh-server

3. Fichiers de configuration

Les principaux fichiers de configuration sont dans le répertoire /etc/ssh :
* ssh_config : fichier de configuration du client
* sshd_config : fichier de configuration du serveur

De plus, ce répertoire contient les couples de clés privées/publiques identifiant vos hôtes :

* ssh_host_dsa_key
* ssh_host_dsa_key.pub
* ssh_host_rsa_key
* ssh_host_rsa_key.pub

Depuis OpenSSH 5.73, une nouvelle paire de clés a fait son apparition :
* ssh_host_ecdsa_key
* ssh_host_ecdsa_key.pub
*
Depuis OpenSSH 6.54, une nouvelle paire de clés a fait son apparition :
* ssh_host_ed25519_key
* ssh_host_ed25519_key.pub

3.1 Régénérer les clés hôte

rm /etc/ssh/ssh_host_*
dpkg-reconfigure openssh-server


4. Accès sur une machine distante

4.1 Avec mot de passe

Si vous voulez vous connecter à la machine $hôte_distant avec l'utilisateur $utilisateur_distant, saisissez simplement

ssh $utilisateur_distant@$hôte_distant

et saisir votre mot de passe.

Si le nom d'utilisateur sur le système local et la machine distante sont les mêmes, vous pouvez omettre la partie $utilisateur_distant@ et saisir simplement

ssh $hôte_distant

Si c'est la première fois que vous vous connectez à l'hôte distant, le client ssh va vous demander si vous êtes certain de vouloir vous connecter à la machine distante. Répondez « oui » après avoir vérifié l'empreinte du serveur et entrez votre mot de passe, ainsi, ssh vous connectera à l'hôte distant.

4.2 Utilisation de clés partagées

Une des fonctionnalités supportées par SSH est l'utilisation d'un couple de clés privée/publique pour se connecter à l'hôte distant. Également nommée SSH keys, cette méthode permet, si l'on se connecte souvent à un hôte distant de ne pas saisir à chaque fois son mot de passe. Pour cela, vous devez générer un couple de clés privée/publique sur votre machine locale et déposer la clé publique sur l'hôte distant.

Pour générer la clé, on utilise le programme ssh-keygen

ssh-keygen -t rsa

Ce programme va générer un couple de clés privé/publique dans le répertoire ~/.ssh. Le programme vous demande dans un premier temps le répertoire de destination des clés, par défaut votre répertoire personnel, une phrase de passe (passphrase) vous est ensuite demandé.

Notes : nous vous conseillons de ne pas laisser la passphrase vide. En effet, un attaquant qui aurait récupéré votre clé privée pourrait ensuite se connecter facilement à tous les hôtes sur lesquels vous avez déposé votre clé publique si la phrase de passe est vide. Pensez à choisir une passphrase longue et complexe.

Votre clé privée est id_rsa (vous ne devez jamais la fournir à un tier), votre clé publique est id_rsa.pub.

Vous devez copier votre clé publique sur l'hôte distant avec la commande ssh-copy-id

ssh-copy-id -i ~/.ssh/id_rsa.pub $utilisateur_distant@$hôte_distant

Vous pouvez maintenant vous connecter simplement à l'hôte distant, la passphrase vous est demandée. Une fois rentré, vous êtes connecté à l'hôte distant. En cas de nouvelles connections, la passphrase ne vous sera plus demandé durant toute votre session.

5. Sécurisation

5.1 Serveur SSH

Par défaut, un serveur SSH est relativement sécurisé. Il est possible, à l'aide de quelques options de configuration ou d'outils, de le rendre encore plus difficile à cracker.

💡️L'utilisation de la dernière version disponible du paquet openssh-server permet de se protéger contre l'utilisation des failles de sécurité connues.

💡️Activez l'authentification par les keys SSH uniquement avec des passphrases (ie. désactivez l'authentification par le seul mot de passe).

💡️Vous pouvez utiliser fail2ban qui est un logiciel de surveillance de fichiers de journal bannissant automatiquement une adresse IP après un certain nombre prédéfini de tentatives de connexion échouées. Il permet de se prémunir automatiquement des attaques par force brute.

📖️️De bonnes pratiques pour l'utilisation de SSH se trouvent à https://lackof.org/taggart/hacking/ssh/


5.1.1 Options de configuration

Il faut éditer le fichier /etc/ssh/sshd_config pour ajuster le paramétrage puis relancer le serveur SSH par

service ssh restart


Désactiver l'utilisation du mot de passe pour l'authentification (PasswordAuthentication no)

Désactiver l'utilisation du compte root (PermitRootLogin no)

N'autoriser que certains utilisateurs ou groupes d'utilisateurs à se connecter (AllowUsers et AllowGroups)

📖️️Les options AllowUsers et AllowGroups n'amélioreront pas la sécurité d'un serveur SSH. Mais, dans certains cas, leur utilisation permet de résister un peu plus longtemps lors des attaques par force brute.


5.1.2 Outils externes

fail2ban : permet de « blacklister » automatiquement à l'aide de iptables les adresses IP tentant d'attaquer par « force brute » un serveur SSH.

denyhosts : comme fail2ban, denyhosts permet de bloquer les adresses IP tentant de forcer une connexion SSH. Mais contrairement à fail2ban, il n'utilise pas iptables, mais le fichier « /etc/hosts.deny ».

5.2 Client SSH

5.2.1 Bonnes pratiques avec le client SSH

💡️L'utilisation de la dernière version disponible du paquet openssh-client permet de se protéger contre l'utilisation des failles de sécurité connues.

💡️Utilisez l'authentification par les clés SSH plutôt que par le mot de passe.

💡️Ajoutez des mots de passe robustes à vos clés SSH. Cela réduit les risques d'attaque par force brute.


📖️️Allez + loin : https://wiki.debian.org/fr/SSH